package com.example.iotctrlpro;

import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private TextView tv;
    private EditText et;
    private Button btn;
    private Handler handler =new Handler()//线程之间的通信,实现传递信息
    {
        @Override
        public boolean sendMessageAtTime(Message msg, long uptimeMillis) {
            switch (msg.what)
            {
                case 1:
                    ByteArrayOutputStream bos=(ByteArrayOutputStream) msg.obj;
                    //tv.setText(bos.toString());
                    Intent intent = new Intent(MainActivity.this, Main2Activity.class);
                    intent.putExtra("p",bos.toString());
                    startActivity(intent);
                    break;
            }
            return super.sendMessageAtTime(msg,uptimeMillis);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }
    private void init() {
        tv = (TextView) findViewById(R.id.textView);
        et = (EditText) findViewById(R.id.editText);
        btn = (Button) findViewById(R.id.button);
        btn.setOnClickListener(this);
    }
    public void onClick(View v) {
        final   String str = et.getText().toString();
        //网络请求、处理不能在主线程中进行，一定要在子线程中进行。因为网络请求一般有1~3秒左右的延时，
        // 在主线程中进行造成主线程的停顿，对用户体验来说是致命的。
        // （主线程应该只进行ＵＩ绘制，像网络请求、资源下载、各种耗时操作都应该放到子线程中）。
        //此处new了一个新的子线程
        new Thread(){
            @Override
            public void run() {
                super.run();
                try{
                    // 定义一个URL对象
                    URL url=new URL(str);
                    //发送http请求:
                    // 原来使用DefaultHttpClient，但是由于其太过复杂，Android团队在保持向后兼容的情况下，
                    // 很难对DefaultHttpClient进行增强。为此，Android团队从Android API Level 9开始自己实现了一个发送http请求的客户端类——
                    // –HttpURLConnection。相比于DefaultHttpClient，HttpURLConnection比较轻量级，虽然功能没有DefaultHttpClient那么强大，
                    // 但是能够满足大部分的需求，
                    // 所以Android推荐使用HttpURLConnection代替DefaultHttpClient，并不强制使用HttpURLConnection。
                    //但从Android API Level 23（Android 6.0）开始，不能再在Android中使用DefaultHttpClient，强制使用HttpURLConnection。
                    HttpURLConnection conn=(HttpURLConnection) url.openConnection();
                    byte[] data=new byte[1024];
                    // 打开该URL的资源输入流
                    //调用getInputStream方法后，服务端才会收到请求，并阻塞式地接收服务端返回的数据，
                    //当调用conn.getInputStream()方法时内部也会自动调用connect方法，所以此处省去了conn.connect();
                    InputStream is=conn.getInputStream();
                    ByteArrayOutputStream baos=new ByteArrayOutputStream();
                    while(is.read(data)!=-1)
                    {
                        baos.write(data);
                    }
                    Message msg=new Message();
                    msg.what=1;
                    msg.obj=baos;
                    handler.sendMessage(msg);
                }catch(Exception e)
                {
                    System.out.println(e.getMessage().toString());
                }
            }
        }.start();
    }
}